package com.bz.backend.item.service.impl;

import com.bz.backend.item.feign.CommonItemFeignClient;
import com.bz.backend.item.service.ItemService;
import com.bz.pojo.TbItem;
import com.bz.pojo.TbItemDesc;
import com.bz.pojo.TbItemParamItem;
import com.bz.utils.IDUtils;
import com.bz.utils.PageResult;
import com.bz.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

@Service
public class ItemServiceImpl implements ItemService {

    @Autowired
    private CommonItemFeignClient commonItemFeignClient;

    /**
     * 分页查询商品
     * @param page
     * @param rows
     * @return
     */
    @Override
    public Result selectTbItemAllByPage(Integer page, Integer rows) {
        PageResult pageResult = commonItemFeignClient.selectTbItemAllByPage(page, rows);
        if (pageResult != null && pageResult.getResult() != null && pageResult.getResult().size() > 0){
            return Result.ok(pageResult);
        }
        return Result.error("无数据");
    }

    /**
     * 添加商品（包括描述、商品规格参数）
     * @param tbItem
     * @param desc
     * @param itemParams
     * @return
     */
    @Override
    //@LcnTransaction
    public Result insertTbItem(TbItem tbItem, String desc, String itemParams) {
        long itemId = IDUtils.genItemId();
        Date date = new Date();
        // 商品
        tbItem.setId(itemId);
        tbItem.setStatus((byte) 1);
        tbItem.setCreated(date);
        tbItem.setUpdated(date);
        Integer resultTbItem = commonItemFeignClient.insertTbItem(tbItem);
        // 商品描述
        TbItemDesc tbItemDesc = new TbItemDesc();
        tbItemDesc.setItemId(itemId);
        tbItemDesc.setItemDesc(desc);
        tbItemDesc.setCreated(date);
        tbItemDesc.setUpdated(date);
        Integer resultTbItemDesc = commonItemFeignClient.insertItemDesc(tbItemDesc);
        // 商品规格参数
        TbItemParamItem tbItemParamItem = new TbItemParamItem();
        tbItemParamItem.setId(IDUtils.genItemId());
        tbItemParamItem.setItemId(itemId);
        tbItemParamItem.setParamData(itemParams);
        tbItemParamItem.setCreated(date);
        tbItemParamItem.setUpdated(date);
        Integer resultTbItemParamItem = commonItemFeignClient.insertTbItemParamItem(tbItemParamItem);
        return Result.ok();
    }

    /**
     * 删除商品
     * @param itemId
     * @return
     */
    @Override
    public Result deleteItemById(Long itemId) {
        TbItem tbItem = new TbItem();
        tbItem.setId(itemId);
        tbItem.setStatus((byte)3);
        Integer result = commonItemFeignClient.deleteItemById(tbItem);
        if (result != 1){
            Result.error("操作失败");
        }
        return Result.ok();
    }

    /**
     * 根据商品ID查询商品，商品分类，商品描述，商品规格参数
     * @param itemId
     * @return
     */
    @Override
    public Result preUpdateItem(Long itemId) {
        return Result.ok(commonItemFeignClient.preUpdateItem(itemId));
    }

    /**
     * 更新商品
     * @param tbItem
     * @param itemDesc
     * @param itemParams
     * @return
     */
    @Override
    //@LcnTransaction
    public Result updateItem(TbItem tbItem, String itemDesc, String itemParams) {
        // 更新商品
        Integer resultItem = commonItemFeignClient.updateItem(tbItem);
        // 更新商品描述
        TbItemDesc tbItemDesc = new TbItemDesc();
        tbItemDesc.setItemId(tbItem.getId());
        tbItemDesc.setItemDesc(itemDesc);
        Integer resultItemDesc = commonItemFeignClient.updateItemDesc(tbItemDesc);
        // 更新商品规格参数
        TbItemParamItem tbItemParamItem = new TbItemParamItem();
        tbItemParamItem.setItemId(tbItem.getId());
        tbItemParamItem.setParamData(itemParams);
        Integer resultItemParamItem = commonItemFeignClient.updateTbItemParamItem(tbItemParamItem);
        return Result.ok();
    }
}
